import cv2
import numpy as np
import matplotlib.pyplot as plt
from tqdm import tqdm

def check_video_frame_sizes(video_path):
    # 打开视频文件
    cap = cv2.VideoCapture(video_path)
    if not cap.isOpened():
        print(f"错误：无法打开视频文件 {video_path}")
        return
    
    # 获取视频总帧数
    total_frames = int(cap.get(cv2.CAP_PROP_FRAME_COUNT))
    
    widths = []
    heights = []
    frame_count = 0
    
    # 读取每一帧并记录尺寸
    with tqdm(total=total_frames, desc="读取视频帧") as pbar:
        while cap.isOpened():
            ret, frame = cap.read()
            if not ret:
                break
                
            height, width = frame.shape[:2]
            heights.append(height)
            widths.append(width)
            frame_count += 1
            pbar.update(1)
    
    cap.release()
    
    # 创建图表
    plt.figure(figsize=(15, 10))
    
    # 绘制宽度变化
    plt.subplot(2, 1, 1)
    plt.plot(widths, label='宽度', color='blue')
    plt.title('视频帧宽度变化')
    plt.xlabel('帧数')
    plt.ylabel('宽度 (像素)')
    plt.grid(True)
    
    # 绘制高度变化
    plt.subplot(2, 1, 2)
    plt.plot(heights, label='高度', color='red')
    plt.title('视频帧高度变化')
    plt.xlabel('帧数')
    plt.ylabel('高度 (像素)')
    plt.grid(True)
    
    plt.tight_layout()
    
    # 打印统计信息
    print(f"\n统计信息:")
    print(f"总帧数: {frame_count}")
    print(f"宽度: 最小值={min(widths)}, 最大值={max(widths)}, 平均值={np.mean(widths):.2f}")
    print(f"高度: 最小值={min(heights)}, 最大值={max(heights)}, 平均值={np.mean(heights):.2f}")
    
    if len(set(widths)) > 1 or len(set(heights)) > 1:
        print("\n警告：视频帧尺寸不一致！这可能导致抖动问题。")
    
    # 显示图表
    plt.show()

if __name__ == '__main__':
    video_path = r"F:\test\output_video_stabilized.mp4"  # 请修改为您的视频路径
    check_video_frame_sizes(video_path) 